/**
 * @R.java  COPYRIGHT xiaojian
 * 
 * Created on 2020年7月28日 下午5:56:24
 */
package xj.toolkit.base;

/**
 * @author <a href="mailto:cxj2000@gmail.com">xiaojian.cao</a>
 *
 */
public class R<T> extends ResponseObject<T>{

	/**
	 * 带有回应数据的成功应答。
	 * 
	 * @param data
	 * @param <T>
	 * @return
	 */
	public static <T> R<T> ok(T data) {
		return new R<T>(data);
	}
	
	/**
	 * 没有回应数据的成功应答。
	 * 
	 * @param <T>
	 * @return
	 */
	public static <T> R<T> ok() {
		return new R<T>(BaseResultCode.OK);
	}
	
	/**
	 * 没有回应数据的错误应答。
	 * 
	 * @param resultCode
	 * @param <T>
	 * @return
	 */
	public static <T> R<T> error(ResultCode resultCode) {
		return new R<T>(resultCode);
	}
	
	/**
	 * 没有回应数据的错误应答。
	 * @param resultCode
	 * @param <T>
	 * @return
	 */
	public static <T> R<T> error(int code, String desc) {
		return new R<T>(code, desc);
	}
	
	/**
	 * 带有回应数据、回应码的应答。
	 * 
	 * @param <T>
	 * @param resultCode
	 * @param data
	 * @return
	 */
	public static <T> R<T> data(ResultCode resultCode, T data) {
		return new R<T>(data, resultCode);
	}

	/**
	 * 
	 * @param data
	 */
	private R(T data) {
		this(BaseResultCode.OK);
		this.data = data;
	}
	
	private R(T data, ResultCode resultCode) {
		this.setResultCode(resultCode);
		this.data = data;
	}

	/**
	 * 
	 * @param resultCode
	 */
	private R(ResultCode resultCode) {
		if (null == resultCode) {
			return;
		}
		this.code = resultCode.getResultCode();
		this.desc = resultCode.getDescription();
	}

	private R(int code, String desc) {
		this.code = code;
		this.desc = desc;
	}

}

